iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

前言

來到第五天! 昨天我們瞭解了一下Django 管理的核心manage.py,今天終於要開始進入我們APP的建置!

什麼是Django APP

首先,當然要先介紹一下APP的架構。
在Django中,APP指的就是應用程式,可以把它當作一個功能的集合。以電商網站為例,我們可以創建一個負責販賣商品的APP和傳訊息給賣家的APP等等,因此一個專案中可以存在多個APP,不同的APP則負責不同的功能。
如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20220912/2015092783afXwZEIS.png

我們可以在terminal透過manage.py來創建我們的APP,首先我們先到manage.py的路徑中。並使用manage.py來創建。

cd Django_project
python manage.py startapp Django_app

使用之後就會幫你創建一個名為Django_app的APP,資料夾結構如下:

https://ithelp.ithome.com.tw/upload/images/20220911/20150927e9zlnF00QI.png

APP資料夾內的檔案用途都和他的命名相關:

init.py - 告訴Python它就是一個 Python的套件(Package)。
admin.py - 用來管理APP。
apps.py - 可以配置APP的某些屬性。
models.py - 用來定義Django app的資料庫。
tests.py - 用來寫Django app的測試。
views.py - 負責接收瀏覽器的請求,進行邏輯的處理後,回傳執行結果給瀏覽器。
migrations - 它會幫你儲存你對資料庫的改變,並自動幫你升級。

INSTALLED_APPS 設定

接著我們到setting找到INSTALLED_APPS,告訴Django我們新加入的APP,才能去管理它,加入的方法有兩種:
一種是加入他的AppConfig,另一種是加入App的名稱,兩種都能使用,其中其實兩種的差別也牽涉到很多細節,不過這裡先不深入,我們先配置好即可。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #第一種方法
    'Django_app.apps.DjangoAppConfig',
    #第二種方法
    'Django_app'
]

Hello World!

我們每次學習新的程式語言都會從Hello World! 開始,所以我們也使用這個方式來開啟我們的第一個Django App。
這時候我們先複習一下前幾天有提到的,當使用者對瀏覽器發出Request時的流程。

https://ithelp.ithome.com.tw/upload/images/20220912/20150927zFQg6wpJZ5.png

首先我們在views內輸入以下程式碼:
我們定義一個hello的函式,並且當它被呼叫時,就會return 一個HttpResponse 裡面是Hello World!

Django_app/views.py

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def hello(request):
    return HttpResponse("Hello World")

接著我們先在Django_app的資料夾內,創建一個urls.py的檔案。並利用以下程式碼和views進行連結。在這裡會先設定路徑為world/,然後讓它知道當它被request時會呼叫剛剛所建立的hello函式。

Django_app/urls.py

from django.urls import path
from . import views 

urlpatterns = [
    path('world/', views.hello, name = 'hello')
]

接著再開啟Django_project的urls,將你想要使用的path寫在前面的字串,後面則是include要串連的urls,將網址路徑設定好當網址是 http://127.0.0.1:8000/hello/world 時,會連過去Django_app的urls。

Django_project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('Django_app.urls'))
]

這些步驟其實就是要實現將我們要呈現的views和urls.py進行連結,讓使用者輸入網址時,能夠到達正確的views,那你們可能會有疑惑為什麼要連結app的urls.py之後再連結project的urls.py,其實只連結project的urls.py也是可以的,當專案比較小的時候可能也會出現這種情形,但是若你的專案有多個APP,每個APP的路徑都寫在project的urls.py裡,光維護和修改就要先搞清楚到底是哪個APP,因此還是推薦大家可以用兩層的方式進行連結!
https://ithelp.ithome.com.tw/upload/images/20220912/20150927Dq30d4IGGY.png

完成之後就可以到manage.py的資料夾執行runserver指令。

python manage.py runserver

之後進入 http://127.0.0.1:8000/hello/world
就可以看到我們Response的字串了!!

實際呈現畫面

https://ithelp.ithome.com.tw/upload/images/20220912/20150927wDNCOmnypO.png

也推薦大家自己去改動urls的連結動手玩玩看會更瞭解它是怎麼運作的!
像是可以自己寫寫看如果讓views直接連結到project的urls可以怎麼做。
那我們今天就到這裡,大家明天見!

參考資料&推薦閱讀

https://docs.djangoproject.com/en/4.1/intro/tutorial01/


上一篇
Day4 -Django的控制中樞- mange.py和django-admin
下一篇
Day6 -URLS and Views -path()到底在做什麼
系列文
從0 到 50 初探 如何使用Django 架構出一個網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言